#ifndef __DRAWING_BOARD_H
#define __DRAWING_BOARD_H

#define SCREEN_WIDTH 800   // 显示屏宽度
#define SCREEN_HEIGHT 480  // 显示屏高度
#define COLOR_COUNT 8      // 颜色总数
#define RIGHT_MARGIN 100   // 右边框的宽度
#define LINE_MAX 60        // 最大线条宽度
#define LINE_MIN 5         // 最小线条宽度
#define STACK_SIZE 30      // 撤销栈最大深度
#define REDO_STACK_SIZE 30 // 最大恢复栈深度

// 颜色定义
#define BLACK 0x00000000    // 黑
#define WHITE 0x00ffffff    // 白
#define RED 0x00ff0000      // 红
#define GREEN 0x0000ff00    // 绿
#define BLUE 0x000000ff     // 蓝
#define YELLOW 0x00ffff00   // 黄
#define PURPLISH 0x00ff00ff // 紫
#define GREY 0x00c0c0c0     // 灰

int drawing_board(char *account);
void LCD_clear(int num);
void state_init();
void initialize_screen(int (*lcd_mmap)[SCREEN_WIDTH], int num);
void handle_touch_event(struct input_event touch_event, int (*lcd_mmap)[SCREEN_WIDTH], char *account);
void draw_brush(int (*lcd_mmap)[SCREEN_WIDTH], int x, int y);
void draw_interface(int (*lcd_mmap)[SCREEN_WIDTH]);
void save_state(int (*lcd_mmap)[SCREEN_WIDTH]);
void restore_state(int (*lcd_mmap)[SCREEN_WIDTH]);
void redo_state(int (*lcd_mmap)[SCREEN_WIDTH]);
void draw_line(int (*lcd_mmap)[800], int x0, int y0, int x1, int y1);
void draw_rectangle(int (*lcd_mmap)[800], int x0, int y0);
void set_pixel(int (*lcd_mmap)[800], int x, int y);
void fill_rectangle(int (*lcd_mmap)[800]);
void size_refresh(int (*lcd_mmap)[SCREEN_WIDTH]);
char *rand_num();

typedef struct
{
    int data[SCREEN_HEIGHT][SCREEN_WIDTH];
} ScreenState;

ScreenState undo_stack[STACK_SIZE];      // 撤销栈
ScreenState redo_stack[REDO_STACK_SIZE]; // 恢复栈

#endif